package com.usian.user.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;


/**
 * 通过代码的方式  帮我生成交换机  生成队列  并且绑定交换机和队列
 */
@Configuration//程序一起来就运行
public class RabbitMQConfig {
//================================================基于延迟队列实现==========================================

    public static final String AUTHEXCHANGE="authExchangedelay";
    public static final String AUTHQUEUE="authQueuedelay";
        //声明交换机  rabbitmq中提供了四种交换机类型  fanout(发布订阅式）  direct（routingkey模式） topic（主题模式）  header（头信息模式）
        //用routingkey模式
    @Bean(AUTHEXCHANGE)
    public Exchange AUTHEXCHANGE(){
        //  durable:交换机是否持久化（true  false）
        //delayed()：延迟插件  默认为true
        return ExchangeBuilder.directExchange(AUTHEXCHANGE).delayed().durable(true).build();
    }

    //声明队列
    @Bean(AUTHQUEUE)
    public Queue AUTHQUEUE(){
        //队列默认持久化
        return new Queue(AUTHQUEUE);
    }

    //绑定交换机和队列  Binging

    /**
     * @Autowired  只能根据类型注入
     * @Resource   先根据名字注入  再根据类型注入
     * @Qualifier  自能跟据名字注入
     * @return
     */
@Bean
    public Binding AUTHEXCHANGE_AUTHQUEUE(@Qualifier(AUTHEXCHANGE) Exchange exchange, @Qualifier(AUTHQUEUE) Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with("auth").noargs();

    }





















}
